package com.example.myapplication.Button;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.myapplication.R;
import com.example.myapplication.util.DateUtil;


public class ButtonClickActivity extends AppCompatActivity implements View.OnClickListener {


    // 声明一个静态的TextView变量，用于在界面上显示结果。
    // 声明为 static 意味着这个变量属于类本身，而不是类的某个特定实例。
    // 这使得静态内部类 MyOnClickListener 可以直接访问它。
    private static TextView tv_result;

    /**
     * Activity的生命周期方法，在创建Activity时调用。
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button_click);

        tv_result = findViewById(R.id.tv_result);
        // 找到布局文件中的 btn_click_single 按钮视图。
        Button btn_click_single = findViewById(R.id.btn_click_single);
        // 当 btn_click_single 被点击时，调用 MyOnClickListener 的 onClick 方法。
        btn_click_single.setOnClickListener(new MyOnClickListener());

        /*
        setOnClickListener()方法：
        被点击的视图.setOnClickListener(被点击后触发的对象)
        * */


        Button btn_click_public = findViewById(R.id.btn_click_public);
        // 当 btn_click_public 被点击时，调用 ButtonClickActivity 的 onClick 方法。
        // "this" 指的是 ButtonClickActivity 这个类本身。
        btn_click_public.setOnClickListener(this);
    }

    /**
     * 当设置了 setOnClickListener(this) 的视图被点击时，这个方法会被调用。
     */
    @Override
    public void onClick(View v) {
        // 判断被点击的视图是否是 btn_click_public 按钮。
        if (v.getId() == R.id.btn_click_public) {
            // 如果是，获取当前时间并设置到 tv_result 文本视图上。
            tv_result.setText(DateUtil.getNowTime());
        }
    }

    /**
     * 定义一个静态内部类来实现 View.OnClickListener 接口。
     * 这是一个专门用于处理按钮点击事件的监听器类。
     * "static" 关键字确保这个内部类不持有对外部Activity实例的隐式引用，有助于防止内存泄漏。
     */
    static class MyOnClickListener implements View.OnClickListener {
        /**
         * 当这个监听器所绑定的视图（在这里是 btn_click_single）被点击时，此方法被调用。
         */
        @Override
        public void onClick(View v) {
            tv_result.setText(DateUtil.getNowTime());
        }
    }
}